package smartMarket.pessoa;

import banco.pessoa.BancoCliente;
import excecoes.estoque.DinheiroNegativoException;
import excecoes.pessoa.CpfCnpjExistenteException;
import excecoes.pessoa.LocalizacaoInvalidaException;
import excecoes.pessoa.CpfCnpjInvalidoException;
import excecoes.pessoa.NomeFantasiaNuloException;
import excecoes.pessoa.NomeInvalidoException;
import java.sql.SQLException;

public abstract class Pessoa {

    // Atributos
    private String nome;
    private int estado;
    private String cidade;
    private String bairro;
    private String rua;
    private String numero;
    private String telefone;
    private String celular;
    private String email;
    protected String CPF_CNPJ;
    private int codigo;

    // Gets
    public String getNome() {
        return nome;
    }

    public int getEstado() {
        return estado;
    }

    public String getCidade() {
        return cidade;
    }

    public String getBairro() {
        return bairro;
    }

    public String getRua() {
        return rua;
    }

    public String getNumero() {
        return numero;
    }

    public String getTelefone() {
        return telefone;
    }

    public String getCelular() {
        return celular;
    }

    public String getEmail() {
        return email;
    }

    public String getCPF_CNPJ() {
        return CPF_CNPJ;
    }

    public int getCodigo() {
        return codigo;
    }

    // Sets
    public void setNome(String nome) throws NomeInvalidoException {
        if (nome.equals("")) {
            throw new NomeInvalidoException();
        } else {
            this.nome = nome;
        }

    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public void setCidade(String cidade) throws LocalizacaoInvalidaException {
        if (cidade.equals("")) {
            throw new LocalizacaoInvalidaException();
        }
        this.cidade = cidade;
    }

    public void setBairro(String bairro) throws LocalizacaoInvalidaException {
        if (bairro.equals("")) {
            throw new LocalizacaoInvalidaException();
        }
        this.bairro = bairro;
    }

    public void setRua(String rua) throws LocalizacaoInvalidaException {
        if (rua.equals("")) {
            throw new LocalizacaoInvalidaException();
        }
        this.rua = rua;
    }

    public void setNumero(String numero) throws LocalizacaoInvalidaException {
        if (numero.equals("")) {
            throw new LocalizacaoInvalidaException();
        }
        this.numero = numero;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    // ERRO O CPF esta usando o format . . . - dessa forma não
    // posso usar o equals("");
    public abstract void setCPF_CNPJ(String CPF_CNPJ) throws CpfCnpjInvalidoException, SQLException, NullPointerException, NomeInvalidoException, DinheiroNegativoException, CpfCnpjExistenteException, LocalizacaoInvalidaException;
    
    //public abstract void setCPF_CNPJ(String CPF_CNPJ, boolean adicionamento) throws CpfCnpjInvalidoException, SQLException, NullPointerException, NomeInvalidoException, DinheiroNegativoException, CpfCnpjExistenteException, LocalizacaoInvalidaException;
    
    public abstract void setCPF_CNPJ(String CPF_CNPJ, boolean adicionamento) throws CpfCnpjInvalidoException, SQLException, NullPointerException, NomeInvalidoException, DinheiroNegativoException, CpfCnpjExistenteException, LocalizacaoInvalidaException, NomeFantasiaNuloException;

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
}